﻿#define _CRT_SECURE_NO_WARNINGS 1	
#include<iostream>
using namespace std;

//class Date
//{
//public:
//    //Date(int year = 1970, int month = 1, int day = 1)
//    //    :_year(year)
//    //    , _month(month)
//    //    , _day(day)
//    //{
//    //    //………
//    //}
//
//    Date(int year = 1970, int month = 1, int day = 1, const int ci = 10)
//    {
//        //此时是赋值，变量在使用前，仍然是随机值状态
//        _year = year;
//        _month = month;
//        _day = day;
//        _ci = ci;
//    }
//private:
//    int _year;
//    int _month;
//    int _day;
//    const int _ci;
//};
//
//class Date
//{
//public:
//    Date(int year = 1970, int month = 1, int day = 1, const int ci = 0, const int& ref = 0)
//        :_year(year)	//以下三行构成初始化列表
//        , _month(month)
//        , _day(day)
//        , _ci(ci)	//const 成员能初始化
//        , _ref(ref)	//引用成员也能初始化
//    {
//        //………
//    }
//private:
//    int _year;
//    int _month;
//    int _day;
//    const int _ci;
//    const int& _ref;
//};
//
//int main()
//{
//    Date d;
//    //Date d1(2023, 2, 10, 0, 0);
//    int a = 10;
//    double b = 3.1415926;
//    a = b;
//    return 0;
//}

//class A
//{
//public:
//	//默认构造函数
//	A(int a = 0)
//		:_a(a)
//	{
//		//表示默认构造函数被调用过
//		cout << "A(int a = 0)" << endl;
//	}
//
//	//默认析构函数
//	~A()
//	{
//		_a = 0;
//
//		//表示默认析构函数已被调用
//		cout << "~A" << endl;
//	}
//
//	//拷贝构造函数
//	A(const A& a)
//	{
//		_a = a._a;
//
//		cout << "A(const A& a)" << endl;
//	}
//
//	//赋值重载函数
//	A& operator=(const A& a)
//	{
//		_a = a._a;
//
//		cout << "A& operator=(const A& a)" << endl;
//		return *this;
//	}
//private:
//	int _a;
//};
//
//static int n = 100;
//
//int main()
//{
//	A aa1 = 100;	//注：此时整型 100 不能赋给自定义类型
//	return 0;
//}

//class Test
//{
//public:
//	//Test(int val = 0, static int sVal = 0)
//	//	:_val(val)
//	//	, _sVal(sVal)	//非法的，初始化列表也无法初始化静态成员变量
//	//{}
//
//	static void Print()
//	{
//		//cout << _val << endl;	//非法的，没有 this 指针，无法访问对象成员
//		cout << _sVal << endl;
//	}
//private:
//	int _val;
//	static int _sVal;	//静态成员变量
//};
//
//int _sVal = 0;	//静态成员变量必须在类外初始化(定义)

//class Test
//{
//public:
//	Test(int val = 0)
//		:_val(val)
//	{
//		_sVal++;	//利用静态成员变量进行累加统计
//	}
//
//	static void Print()
//	{
//		cout << _sVal;
//	}
//private:
//	int _val = 0;
//	static int _sVal;	//静态成员变量
//};
//
//int Test::_sVal = 0;	//静态成员变量必须在类外初始化(定义)
//
//int main()
//{
//	Test T[10];	//调用十次构造函数
//
//	//通过静态成员变量验证
//	cout << "程序共调用了";
//	Test::Print();
//	cout << "次成员函数" << endl;
//	return 0;
//}

//class Test
//{
//public:
//	//声明外部函数 Print 为友元函数
//	friend void Print(const Test&d);
//
//	Test(int val = 100)
//		:_val(val)
//	{}
//
//private:
//	int _val;
//};
//
//void Print(const Test& d)
//{
//	cout << "For Friend " << d._val << endl;
//}
//
//int main()
//{
//	Test t;
//	Print(t);
//	return 0;
//}
//
//class Time
//{
//	friend class Date; // 声明日期类为时间类的友元类，则在日期类中就直接访问Time类
//public:
//	Time(int hour = 0, int minute = 0, int second = 0)
//		: _hour(hour)
//		, _minute(minute)
//		, _second(second)
//	{}
//private:
//	int _hour;
//	int _minute;
//	int _second;
//};
//class Date
//{
//public:
//	Date(int year = 1900, int month = 1, int day = 1)
//		: _year(year)
//		, _month(month)
//		, _day(day)
//	{}
//	void SetTimeOfDate(int hour, int minute, int second)
//	{
//		// 直接访问时间类私有的成员变量
//		_t._hour = hour;
//		_t._minute = minute;
//		_t._second = second;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//	Time _t;
//};

class A
{
public:
	//默认构造函数
	A(int a = 0)
		:_a(a)
	{
		//表示默认构造函数被调用过
		cout << "A(int a = 0)" << endl;
	}

	//默认析构函数
	~A()
	{
		_a = 0;

		//表示默认析构函数已被调用
		cout << "~A" << endl;
	}

	//拷贝构造函数
	A(const A& a)
	{
		_a = a._a;

		cout << "A(const A& a)" << endl;
	}

	//赋值重载函数
	A& operator=(const A& a)
	{
		if (this != &a)
		{
			_a = a._a;
		}

		cout << "A& operator=(const A& a)" << endl;
		return *this;
	}

	void Print(A a)
	{
		cout << a._a << endl;
	}

private:
	int _a;
};

void func1(A aa)
{}

A func2()
{
	return A(100);
}

int main()
{
	//func1(100);
	A a = func2();
	return 0;
}

//博客链接
//https://blog.csdn.net/weixin_61437787/article/details/128967586?spm=1001.2014.3001.5501